package main

import (
	"fmt"
	"sync"
)

/*
并发：同一时间段内执行多个任务
并行：同一时间执行多个任务
*/

var swg sync.WaitGroup

func say1To9() {
	for i := 0; i < 10; i++ {
		fmt.Print(i, " ")
	}
	fmt.Println()
	swg.Done() // 函数执行结束后触发
}

func sayHello() {
	fmt.Println("hello world")
}

func main() {
	/*
			具有返回值的内置函数不允许跟随在 go 关键字后面，例如下面的错误示范
			go make([]int,10)
		    ------------------------------
		    主协程结束，创建的协程也会同步结束
	*/
	go say1To9() // 开启一个协程
	sayHello()

	swg.Add(1) // 声明协程数量
	swg.Wait() // 等待所有协程运行结束

}
